package vargapeter.bet.server;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * A fogadóirodák vezérlését és a fájlból beolvasásukat megvalósító osztály. 
 */
public class BookmakerManager {
	private List<Bookmaker> bookmakers = new ArrayList<Bookmaker>();

	public BookmakerManager() throws IOException {
		initBookmakers();
	}

	/**
	 * Beolvassa a fogadóirodákat a fájlból és hozzáadja őket a bookmakers listához.
	 * @throws IOException
	 */
	private void initBookmakers() throws IOException {
		Scanner sc = new Scanner(getClass().getResourceAsStream("/fogadoirodak.txt"));
		sc.useDelimiter("\t");
		while (sc.hasNext()) {
			Bookmaker bookmaker = new Bookmaker(sc.next().trim(), sc.nextInt(), sc.nextInt(), sc.nextInt());
			bookmakers.add(bookmaker);
		}
	}

	/** 
	 * Ez az egyetlen mód, hogy a kliens kommunikálhasson a szerverrel. Közvetlen kapcsolat nincs.
	 * @return Visszaadja a fogadóirodák portjait.
	 */
	public List<Integer> getBookmakerPorts() {
		List<Integer> bookmakerPorts = new ArrayList<Integer>();
		for (Bookmaker bookmaker : bookmakers) {
			bookmakerPorts.add(bookmaker.getPort());
		}
		return bookmakerPorts;
	}

	/**
	 * Ez az osztály kezeli a fogadóirodákat. Elindítja a szolgáltatást.
	 */
	private class BookmakerHandler implements Runnable {
		private Bookmaker bookmaker;

		public BookmakerHandler(Bookmaker bookmaker) {
			this.bookmaker = bookmaker;
		}

		public void run() {
			bookmaker.startService();
		}
	}

	public void init() {
		for (Bookmaker bookmaker : bookmakers) {
			new Thread(new BookmakerHandler(bookmaker)).start();
		}		
	}
}
